package cn.byapps.hw.service.impl;

import cn.byapps.hw.dao.TimetableDao;
import cn.byapps.hw.entity.Teacher;
import cn.byapps.hw.entity.Timetable;
import cn.byapps.hw.service.TimetableService;
import cn.byapps.hw.utils.DataUtils;
import cn.byapps.hw.vo.ClazzTimetableVO;
import cn.byapps.hw.vo.TeacherTimetableVO;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

@Service
public class TimetableServiceImpl implements TimetableService {

    @Resource
    private TimetableDao timetableDao;


    @Override
    public List<TeacherTimetableVO> teacherTimetable(Teacher teacher, Integer date) throws ParseException {
        List<TeacherTimetableVO> teacherTimetableVOS = new ArrayList<>();
        for (int i = 0; i < 20; i++) teacherTimetableVOS.add(new TeacherTimetableVO());

        Date day = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        //格式化时间
        Date beginTime = format.parse(format.format(day));
        //获取时间当时的周数
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(beginTime);
        Integer beginWeek = calendar.get(Calendar.WEEK_OF_YEAR);

        String beginDay = DataUtils.getStartDayOfWeekNo(calendar.get(Calendar.YEAR), beginWeek + (date));
        String endDay = DataUtils.getEndDayOfWeekNo(calendar.get(Calendar.YEAR), beginWeek + (date));

        System.out.println(beginDay);
        System.out.println(endDay);
        System.out.println("-----------");

        List<Timetable> timetables = timetableDao.getByTeacherId(teacher, format.parse(beginDay), format.parse(endDay));
        for (int i = 0; i < timetables.size(); i++) {
            if (timetables.get(i).getWeek().equals("星期一")) {
                TeacherTimetableVO teacherTimetableVO = teacherTimetableVOS.get(i);
                teacherTimetableVO.setClassName(timetables.get(i).getSerialPK().getClazz().getName());
                teacherTimetableVO.setCourseName(timetables.get(i).getSerialPK().getCourse().getName());
                teacherTimetableVO.setDate(timetables.get(i).getTime());
                teacherTimetableVO.setNum(timetables.get(i).getNumber());
                teacherTimetableVO.setWeek(timetables.get(i).getWeek());
            } else if (timetables.get(i).getWeek().equals("星期二")) {
                TeacherTimetableVO teacherTimetableVO = teacherTimetableVOS.get(3 + timetables.get(i).getNumber());
                teacherTimetableVO.setClassName(timetables.get(i).getSerialPK().getClazz().getName());
                teacherTimetableVO.setCourseName(timetables.get(i).getSerialPK().getCourse().getName());
                teacherTimetableVO.setDate(timetables.get(i).getTime());
                teacherTimetableVO.setNum(timetables.get(i).getNumber());
                teacherTimetableVO.setWeek(timetables.get(i).getWeek());
            } else if (timetables.get(i).getWeek().equals("星期三")) {
                TeacherTimetableVO teacherTimetableVO = teacherTimetableVOS.get(7 + timetables.get(i).getNumber());
                teacherTimetableVO.setClassName(timetables.get(i).getSerialPK().getClazz().getName());
                teacherTimetableVO.setCourseName(timetables.get(i).getSerialPK().getCourse().getName());
                teacherTimetableVO.setDate(timetables.get(i).getTime());
                teacherTimetableVO.setNum(timetables.get(i).getNumber());
                teacherTimetableVO.setWeek(timetables.get(i).getWeek());
            } else if (timetables.get(i).getWeek().equals("星期四")) {
                TeacherTimetableVO teacherTimetableVO = teacherTimetableVOS.get(11 + timetables.get(i).getNumber());
                teacherTimetableVO.setClassName(timetables.get(i).getSerialPK().getClazz().getName());
                teacherTimetableVO.setCourseName(timetables.get(i).getSerialPK().getCourse().getName());
                teacherTimetableVO.setDate(timetables.get(i).getTime());
                teacherTimetableVO.setNum(timetables.get(i).getNumber());
                teacherTimetableVO.setWeek(timetables.get(i).getWeek());
            } else if (timetables.get(i).getWeek().equals("星期五")) {
                TeacherTimetableVO teacherTimetableVO = teacherTimetableVOS.get(15 + timetables.get(i).getNumber());
                teacherTimetableVO.setClassName(timetables.get(i).getSerialPK().getClazz().getName());
                teacherTimetableVO.setCourseName(timetables.get(i).getSerialPK().getCourse().getName());
                teacherTimetableVO.setDate(timetables.get(i).getTime());
                teacherTimetableVO.setNum(timetables.get(i).getNumber());
                teacherTimetableVO.setWeek(timetables.get(i).getWeek());
            }
        }
        return teacherTimetableVOS;
    }

    @Override
    public List<ClazzTimetableVO> clazzTimetable(Integer clazzId, Integer date) throws ParseException {
        List<ClazzTimetableVO> clazzTimetableVOS = new ArrayList<>();
        for (int i = 0; i < 20; i++) clazzTimetableVOS.add(new ClazzTimetableVO());

        Date day = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        //格式化时间
        Date beginTime = format.parse(format.format(day));
        //获取时间当时的周数
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(beginTime);
        Integer beginWeek = calendar.get(Calendar.WEEK_OF_YEAR);

        String beginDay = DataUtils.getStartDayOfWeekNo(calendar.get(Calendar.YEAR), beginWeek + (date));
        String endDay = DataUtils.getEndDayOfWeekNo(calendar.get(Calendar.YEAR), beginWeek + (date));

        System.out.println(beginDay);
        System.out.println(endDay);
        System.out.println("-----------");

        List<Timetable> timetables = timetableDao.getByClazzId(clazzId, format.parse(beginDay), format.parse(endDay));
        for (int i = 0; i < timetables.size(); i++) {
            if (timetables.get(i).getWeek().equals("星期一")) {
                ClazzTimetableVO teacherTimetableVO = clazzTimetableVOS.get(i);
                teacherTimetableVO.setTeacherName(timetables.get(i).getSerialPK().getTeacher().getName());
                teacherTimetableVO.setCourseName(timetables.get(i).getSerialPK().getCourse().getName());
                teacherTimetableVO.setDate(timetables.get(i).getTime());
                teacherTimetableVO.setNum(timetables.get(i).getNumber());
                teacherTimetableVO.setWeek(timetables.get(i).getWeek());
            } else if (timetables.get(i).getWeek().equals("星期二")) {
                ClazzTimetableVO teacherTimetableVO = clazzTimetableVOS.get(3 + timetables.get(i).getNumber());
                teacherTimetableVO.setTeacherName(timetables.get(i).getSerialPK().getTeacher().getName());
                teacherTimetableVO.setCourseName(timetables.get(i).getSerialPK().getCourse().getName());
                teacherTimetableVO.setDate(timetables.get(i).getTime());
                teacherTimetableVO.setNum(timetables.get(i).getNumber());
                teacherTimetableVO.setWeek(timetables.get(i).getWeek());
            } else if (timetables.get(i).getWeek().equals("星期三")) {
                ClazzTimetableVO teacherTimetableVO = clazzTimetableVOS.get(7 + timetables.get(i).getNumber());
                teacherTimetableVO.setTeacherName(timetables.get(i).getSerialPK().getTeacher().getName());
                teacherTimetableVO.setCourseName(timetables.get(i).getSerialPK().getCourse().getName());
                teacherTimetableVO.setDate(timetables.get(i).getTime());
                teacherTimetableVO.setNum(timetables.get(i).getNumber());
                teacherTimetableVO.setWeek(timetables.get(i).getWeek());
            } else if (timetables.get(i).getWeek().equals("星期四")) {
                ClazzTimetableVO teacherTimetableVO = clazzTimetableVOS.get(11 + timetables.get(i).getNumber());
                teacherTimetableVO.setTeacherName(timetables.get(i).getSerialPK().getTeacher().getName());
                teacherTimetableVO.setCourseName(timetables.get(i).getSerialPK().getCourse().getName());
                teacherTimetableVO.setDate(timetables.get(i).getTime());
                teacherTimetableVO.setNum(timetables.get(i).getNumber());
                teacherTimetableVO.setWeek(timetables.get(i).getWeek());
            } else if (timetables.get(i).getWeek().equals("星期五")) {
                ClazzTimetableVO teacherTimetableVO = clazzTimetableVOS.get(15 + timetables.get(i).getNumber());
                teacherTimetableVO.setTeacherName(timetables.get(i).getSerialPK().getTeacher().getName());
                teacherTimetableVO.setCourseName(timetables.get(i).getSerialPK().getCourse().getName());
                teacherTimetableVO.setDate(timetables.get(i).getTime());
                teacherTimetableVO.setNum(timetables.get(i).getNumber());
                teacherTimetableVO.setWeek(timetables.get(i).getWeek());
            }
        }
        return clazzTimetableVOS;
    }

    @Override
    public List<TeacherTimetableVO> getAll() {
        List<TeacherTimetableVO> teacherTimetableVOS = new ArrayList<>();
        for (Timetable t : timetableDao.findAll()) {
            teacherTimetableVOS.add(new TeacherTimetableVO(t.getSerialPK().getClazz().getName(), t.getSerialPK().getCourse().getName(), t.getTime(), t.getWeek(), t.getNumber()));
        }
        return teacherTimetableVOS;
    }
}
